/**
 * 
 */
package ar.utn.frgp.banco.dao.impl;

import genericos.dao.exeptions.PersistanceException;
import genericos.dao.exeptions.PersistenceServiceException;

import java.io.Serializable;

import ar.utn.frgp.banco.dao.CommonDAO;
import ar.utn.frgp.banco.dao.EBAbstractDAO;
import ar.utn.frgp.banco.exceptions.DataAccessException;

/**
 * @author PUSDERKIS
 *
 */
public class CommonDAOImpl extends EBAbstractDAO implements CommonDAO {

	/**
	 * @see ar.utn.frgp.banco.dao.CommonDAO#save(java.lang.Object)
	 */
	public <T> void save(T object) throws DataAccessException {
		
		try{
			universalHibernateDAO.saveOrUpdate(object);
		} catch (PersistenceServiceException e) {
			logger.error("No se pudo recuperar el objeto de la base de datos.",e);
			throw new DataAccessException("No se pudo guardar el objeto.",e);
		}catch (Exception e) {
			// TODO: handle exception
		}

 	}

	/**
	 * @see ar.utn.frgp.banco.dao.CommonDAO#load(java.lang.Object, java.io.Serializable)
	 */
	@SuppressWarnings("unchecked")
	public <T> T load(Class<T> object, Serializable id) throws DataAccessException {
		try {
			return (T) universalHibernateDAO.load(object, id);
		} catch (PersistanceException e) {
			logger.error("No se pudo cargar el objeto con id: "+id,e);
			throw new DataAccessException("No se pudo cargar el objeto.",e);
		}
	}

	public <T> void delete(T object) throws DataAccessException {
		try{
			universalHibernateDAO.delete(object);
		} catch (PersistenceServiceException e) {
			logger.error("No se pudo eliminar el objeto de la base de datos.",e);
			throw new DataAccessException("No se pudo elimiar el objeto.",e);
		}
		
	}

}
